package org.chen.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.chen.domain.dto.*;
import org.chen.domain.entity.UserVideoConfig;
import org.chen.domain.entity.VideoTask;
import org.chen.domain.response.PageResult;
import org.chen.domain.vo.TaskVO;

import javax.servlet.ServletOutputStream;
import javax.validation.constraints.NotEmpty;
import java.io.IOException;
import java.io.OutputStream;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

public interface VideoTaskService extends IService<VideoTask> {
    /**
     * 创建视频生成任务
     */
    List<String> createTasks(BatchGenerateDTO generateDTO);
    
    /**
     * 处理回调
     */
    void handleCallback(VideoCallbackDTO callback);
    
    /**
     * 获取任务列表
     */
    PageResult<TaskVO> getTaskList(TaskQueryDTO query);
    
    /**
     * 重试失败的任务
     */
    void retryTask(String taskId);

    void downloadVideos(List<String> taskIds, OutputStream outputStream) throws IOException;

    void deleteTask(String id);

    void batchDelete(@NotEmpty(message = "视频ID列表不能为空") List<String> ids);

    /**
     * 获取视频统计数据
     */
    VideoStatisticsDTO getStatistics();

    /**
     * 获取最近的任务列表
     * @param limit 限制数量
     */
    List<TaskVO> getRecentTasks(int limit);

    /**
     * 获取任务趋势数据
     * @param startTime 开始时间
     * @param endTime 结束时间
     */
    Map<String, Integer> getTaskTrend(LocalDateTime startTime, LocalDateTime endTime);

    void batchRetryTasks(List<String> taskIds);

    /**
     * 创建多数字人模式的视频任务
     * @param generateDTO 多数字人生成请求
     * @return 创建的任务ID列表
     */
    List<String> createMultiAvatarTasks(BatchMultiAvatarGenerateDTO generateDTO);
}